/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package util;

import java.util.Hashtable;

/**
 *
 * @author Ruben
 */
public class PalabraClave {

    public static int AS = 301;
    public static int COMIENZO = 302;
    public static int BEGEXEC = 303;
    public static int BEGPROG = 304;
    public static int DEFINST = 305;
    public static int HACER = 306;
    public static int SI_NO = 307;
    public static int FIN = 308;
    public static int ENDEXEC = 309;
    public static int ENDPROG = 310;
    public static int SI = 311;
    public static int ITERATE = 312;
    public static int ENTONCES = 313;
    public static int TIMES = 314;
    public static int MIENTRAS = 315;
    //public static int INIPROGRAMA = 315;
    TipoToken tokenTipo;
    String token;
    static Hashtable resTabla;

    public PalabraClave(TipoToken tokenTipo, String token) {

        this.tokenTipo = tokenTipo;
        this.token = token.toLowerCase().intern();
        this.resTabla.put(token, this);
    }

    public String getToken() {

        return token;
    }

    public TipoToken getTipoToken() {

        return tokenTipo;
    }

    static {
        resTabla = new Hashtable();
        new PalabraClave(TipoToken.INIPROGRAMA, "inicioprograma");
        new PalabraClave(TipoToken.FINALPROGRAMA, "finalprograma");   
        
        new PalabraClave(TipoToken.INICIOEJECUCION, "inicioejecucion");
        new PalabraClave(TipoToken.FINEJECUCION, "finejecucion");
        
        new PalabraClave(TipoToken.PROCEDIMIENTO, "procedimiento");
        new PalabraClave(TipoToken.FINPROCEDIMIENTO, "finprocedimiento");
        
        new PalabraClave(TipoToken.INICIO, "inicio");
        new PalabraClave(TipoToken.FIN, "fin");
        
        
        
        

        new PalabraClave(TipoToken.SI, "si");
        new PalabraClave(TipoToken.ENTONCES, "entonces");
        new PalabraClave(TipoToken.SI_NO, "sino");
        new PalabraClave(TipoToken.FIN_SI, "finsi");

        new PalabraClave(TipoToken.MIENTRAS, "mientras");
        new PalabraClave(TipoToken.HACER, "hacer");
        new PalabraClave(TipoToken.FIN_MIENTRAS, "finmientras");
        
        new PalabraClave(TipoToken.REPETIR, "repetir");
        new PalabraClave(TipoToken.VECES, "veces");

        new PalabraClave(TipoToken.PARA, "para");
        new PalabraClave(TipoToken.FIN_PARA, "finpara");
        new PalabraClave(TipoToken.DESDE, "desde");
        new PalabraClave(TipoToken.HASTA, "hasta");        

        new PalabraClave(TipoToken.LIT_CIERTO, "cierto");
        new PalabraClave(TipoToken.LIT_FALSO, "falso");
        new PalabraClave(TipoToken.OP_ASIGNACION, ":=");
        new PalabraClave(TipoToken.OP_DISTINTO, "!=");
        new PalabraClave(TipoToken.OP_DIVISION, "/");
        new PalabraClave(TipoToken.OP_IGUAL, "=");
        new PalabraClave(TipoToken.OP_MAS, "+");
        new PalabraClave(TipoToken.OP_MAYOR, ">");
        new PalabraClave(TipoToken.OP_MENOR, "<");
        new PalabraClave(TipoToken.OP_MENOS, "-");
        new PalabraClave(TipoToken.OP_NOT, "no");
        new PalabraClave(TipoToken.OP_O, "o");
        new PalabraClave(TipoToken.OP_PRODUCTO, "*");
        new PalabraClave(TipoToken.OP_Y, "y");
        new PalabraClave(TipoToken.TIPO_CADENA, "cadena");
        new PalabraClave(TipoToken.TIPO_ENTERO, "entero");
        new PalabraClave(TipoToken.TIPO_LOGICO, "logico");
        new PalabraClave(TipoToken.NOMBRE, "nombre");
        new PalabraClave(TipoToken.CHAR, "char");


    }

    public static PalabraClave buscarPalabra(String s) {

        return (PalabraClave) resTabla.get(s.intern());
    }
}
